import axios from 'axios';
import router from '../router';
// 创建可一个新的axios对象
const request = axios.create({
    baseURL: 'http://localhost:8080/api',   // 后端的接口地址  ip:port
    timeout: 30000
})
//防止session丢失
request.defaults.withCredentials = true;
// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token，对请求参数统一加密
request.interceptors.request.use(config => {
    config.headers['Content-Type'] = 'application/json;charset=utf-8';
    let user = localStorage.getItem("user") ? JSON.parse(localStorage.getItem("user")) : null
    const token = user ? user.token : ''
    console.log(token)
    config.headers['Authorization'] = `${token}`;  // 设置请求头

    return config
}, error => {
    console.error('request error: ' + error) // for debug
    console.log(error)
    return Promise.reject(error)
});

// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        let res = response.data;

        // // 兼容服务端返回的字符串数据
        // if (typeof res === 'string') {
        //     res = res ? JSON.parse(res) : res
        // }
        console.log(response+"响应")
        console.log(res)
        if(res.code===401){
            router.push('/')
            ElMessage({
                showClose: true,
                message: '登录失效，请重新登录',
                type: 'error',
              })
              localStorage.removeItem('user')
        }
        return res;
    },
    error => {
        console.error('response error: ' + error) // for debug
        // console.log(error.response)
        console.log(error)
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    router.push('/')
                    ElMessage({
                        showClose: true,
                        message: '登录失效，请重新登录',
                        type: 'error',
                      })
                      localStorage.removeItem('user')
                    break;
                case 403:
                    ElMessage({
                        showClose: true,
                        message: '权限不足，请联系管理员',
                        type: 'error',
                      })
                    break;
                case 404:
                    ElMessage({
                        showClose: true,
                        message: '请求的资源不存在',
                        type: 'error',
                      })
                    break;
                case 500:
                    ElMessage({
                        showClose: true,
                        message: '服务器内部错误',
                        type: 'error',
                      })
                    break;
                default:
                    ElMessage({
                        showClose: true,
                        message: '请求失败，请检查网络或联系管理员',
                        type: 'error',
                      })
                    break;
            }
        }
        return Promise.reject(error)
    }
)

// 导出request对象
export default request